home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1995 November / EnigmA AMIGA RUN 02 (1995)(G.R. Edizioni)(IT)[!][issue 1995-11][Skylink CD].iso / earcd / misc / nnn.lha / nnn1.35 / src / NetFeedForward.c < prev    next >
C/C++ Source or Header  |  1995-03-21  |  2KB  |  86 lines

  1. /*
  2.  *  $Id: NetFeedForward.c 1.6 1995/03/21 10:52:01 projects Exp $
  3.  *
  4.  *    Function    NetFeedForward
  5.  *    Programmer    Nicholas d'Alterio
  6.  *            Gideon Denby
  7.  *    Date        20/02/95
  8.  *
  9.  *  Synopsis:    This function feeds forwards an input vectors through n layers
  10.  *        containing n nodes. On each layer before the output layer
  11.  *          there is one bias node.
  12.  *
  13.  *  NOTE    Assumes fully connected net.
  14.  *
  15.  *  $Log: NetFeedForward.c $
  16.  * Revision 1.6  1995/03/21  10:52:01  projects
  17.  * Made code more readable
  18.  *
  19.  * Revision 1.5  1995/03/20  23:38:00  daltern
  20.  * Added gain factor
  21.  *
  22.  * Revision 1.4  1995/03/20  22:37:38  daltern
  23.  * Updated to correct transfer function
  24.  *
  25.  * Revision 1.3  1995/03/14  23:21:12  daltern
  26.  * Commented and cleaned up
  27.  *
  28.  *
  29.  */
  30.  
  31. #include "Neural.h"
  32.  
  33. void NetFeedForward( float ***Weight, float **Node, NET netI, float gain ) 
  34.  
  35.  {
  36.  
  37.  
  38.   register int layer, s_node, e_node;
  39.  
  40.   int nodes_in_layer;
  41.   int nodes_in_prev_layer;
  42.  
  43.   float    val;
  44.  
  45. /*
  46.  *  Loop over each layer above inputs.
  47.  */
  48.  
  49.   for ( layer = 1;layer < netI.NumLayers; layer++ ) {
  50.  
  51.     nodes_in_layer      = netI.LayerSize[layer]+1;
  52.     nodes_in_prev_layer = netI.LayerSize[layer-1]+1;
  53.  
  54. /*
  55.  *  For each element in layer sum inputs * weight coming to it.
  56.  */
  57.  
  58.     for ( e_node=1; e_node < nodes_in_layer; e_node++ ) {
  59.  
  60. /*
  61.  *  Loop for each node on previous layer including the bias node.
  62.  */
  63.  
  64.         val = 0.0;
  65.         for ( s_node = 0; s_node < nodes_in_prev_layer; s_node++ ) {
  66.  
  67.             val+=Node[layer-1][s_node]*Weight[layer-1][s_node][e_node];
  68.  
  69.         }   /* end for s_node */
  70.  
  71. /*
  72.  *  Use transfer function to calculate the output of node based on 
  73.  *  sum of inputs * weights.
  74.  */
  75.  
  76.         Node[layer][e_node] = NetTransFunc( val, gain );
  77.  
  78.     }   /* end for e_node */
  79.  
  80.   }   /* end for layer */
  81.  
  82.   return;
  83.  
  84.  }   /* end function NetFeedForward */
  85.  
  86.